@@ -1034,6 +1034,13 @@ Error WasmObjectFile::parseRelocSection(StringRef Name, ReadContext &Ctx) {
1034
1034
if (Reloc.Offset < PreviousOffset)
1035
1035
return make_error<GenericBinaryError>(" relocations not in offset order" ,
1036
1036
object_error::parse_failed);
1037
+
1038
+ auto badReloc = [&](StringRef msg) {
1039
+ return make_error<GenericBinaryError>(
1040
+ msg + " : " + Twine (Symbols[Reloc.Index ].Info .Name ),
1041
+ object_error::parse_failed);
1042
+ };
1043
+
1037
1044
PreviousOffset = Reloc.Offset ;
1038
1045
Reloc.Index = readVaruint32 (Ctx);
1039
1046
switch (type) {
@@ -1046,37 +1053,31 @@ Error WasmObjectFile::parseRelocSection(StringRef Name, ReadContext &Ctx) {
1046
1053
case wasm::R_WASM_TABLE_INDEX_REL_SLEB:
1047
1054
case wasm::R_WASM_TABLE_INDEX_REL_SLEB64:
1048
1055
if (!isValidFunctionSymbol (Reloc.Index ))
1049
- return make_error<GenericBinaryError>(
1050
- " invalid relocation function index" , object_error::parse_failed);
1056
+ return badReloc (" invalid function relocation" );
1051
1057
break ;
1052
1058
case wasm::R_WASM_TABLE_NUMBER_LEB:
1053
1059
if (!isValidTableSymbol (Reloc.Index ))
1054
- return make_error<GenericBinaryError>(" invalid relocation table index" ,
1055
- object_error::parse_failed);
1060
+ return badReloc (" invalid table relocation" );
1056
1061
break ;
1057
1062
case wasm::R_WASM_TYPE_INDEX_LEB:
1058
1063
if (Reloc.Index >= Signatures.size ())
1059
- return make_error<GenericBinaryError>(" invalid relocation type index" ,
1060
- object_error::parse_failed);
1064
+ return badReloc (" invalid relocation type index" );
1061
1065
break ;
1062
1066
case wasm::R_WASM_GLOBAL_INDEX_LEB:
1063
1067
// R_WASM_GLOBAL_INDEX_LEB are can be used against function and data
1064
1068
// symbols to refer to their GOT entries.
1065
1069
if (!isValidGlobalSymbol (Reloc.Index ) &&
1066
1070
!isValidDataSymbol (Reloc.Index ) &&
1067
1071
!isValidFunctionSymbol (Reloc.Index ))
1068
- return make_error<GenericBinaryError>(" invalid relocation global index" ,
1069
- object_error::parse_failed);
1072
+ return badReloc (" invalid global relocation" );
1070
1073
break ;
1071
1074
case wasm::R_WASM_GLOBAL_INDEX_I32:
1072
1075
if (!isValidGlobalSymbol (Reloc.Index ))
1073
- return make_error<GenericBinaryError>(" invalid relocation global index" ,
1074
- object_error::parse_failed);
1076
+ return badReloc (" invalid global relocation" );
1075
1077
break ;
1076
1078
case wasm::R_WASM_TAG_INDEX_LEB:
1077
1079
if (!isValidTagSymbol (Reloc.Index ))
1078
- return make_error<GenericBinaryError>(" invalid relocation tag index" ,
1079
- object_error::parse_failed);
1080
+ return badReloc (" invalid tag relocation" );
1080
1081
break ;
1081
1082
case wasm::R_WASM_MEMORY_ADDR_LEB:
1082
1083
case wasm::R_WASM_MEMORY_ADDR_SLEB:
@@ -1085,8 +1086,7 @@ Error WasmObjectFile::parseRelocSection(StringRef Name, ReadContext &Ctx) {
1085
1086
case wasm::R_WASM_MEMORY_ADDR_TLS_SLEB:
1086
1087
case wasm::R_WASM_MEMORY_ADDR_LOCREL_I32:
1087
1088
if (!isValidDataSymbol (Reloc.Index ))
1088
- return make_error<GenericBinaryError>(" invalid relocation data index" ,
1089
- object_error::parse_failed);
1089
+ return badReloc (" invalid data relocation" );
1090
1090
Reloc.Addend = readVarint32 (Ctx);
1091
1091
break ;
1092
1092
case wasm::R_WASM_MEMORY_ADDR_LEB64:
@@ -1095,26 +1095,22 @@ Error WasmObjectFile::parseRelocSection(StringRef Name, ReadContext &Ctx) {
1095
1095
case wasm::R_WASM_MEMORY_ADDR_REL_SLEB64:
1096
1096
case wasm::R_WASM_MEMORY_ADDR_TLS_SLEB64:
1097
1097
if (!isValidDataSymbol (Reloc.Index ))
1098
- return make_error<GenericBinaryError>(" invalid relocation data index" ,
1099
- object_error::parse_failed);
1098
+ return badReloc (" invalid data relocation" );
1100
1099
Reloc.Addend = readVarint64 (Ctx);
1101
1100
break ;
1102
1101
case wasm::R_WASM_FUNCTION_OFFSET_I32:
1103
1102
if (!isValidFunctionSymbol (Reloc.Index ))
1104
- return make_error<GenericBinaryError>(
1105
- " invalid relocation function index" , object_error::parse_failed);
1103
+ return badReloc (" invalid function relocation" );
1106
1104
Reloc.Addend = readVarint32 (Ctx);
1107
1105
break ;
1108
1106
case wasm::R_WASM_FUNCTION_OFFSET_I64:
1109
1107
if (!isValidFunctionSymbol (Reloc.Index ))
1110
- return make_error<GenericBinaryError>(
1111
- " invalid relocation function index" , object_error::parse_failed);
1108
+ return badReloc (" invalid function relocation" );
1112
1109
Reloc.Addend = readVarint64 (Ctx);
1113
1110
break ;
1114
1111
case wasm::R_WASM_SECTION_OFFSET_I32:
1115
1112
if (!isValidSectionSymbol (Reloc.Index ))
1116
- return make_error<GenericBinaryError>(
1117
- " invalid relocation section index" , object_error::parse_failed);
1113
+ return badReloc (" invalid section relocation" );
1118
1114
Reloc.Addend = readVarint32 (Ctx);
1119
1115
break ;
1120
1116
default :
0 commit comments