OSDN Git Service

[WebAssebmly] Remove reloc ordering constraint
authorSam Clegg <sbc@chromium.org>
Tue, 6 Mar 2018 07:13:10 +0000 (07:13 +0000)
committerSam Clegg <sbc@chromium.org>
Tue, 6 Mar 2018 07:13:10 +0000 (07:13 +0000)
The MC layer doesn't currently emit relocations in offset
order for the entire code section so this check was causing
failures on the wasm waterfall.

Perhaps we can re-instate this check if we divide the relocations
per-function, or add extra ordering the MC object writer.

Differential Revision: https://reviews.llvm.org/D44136

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@326765 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Object/WasmObjectFile.cpp

index 044bd76..3b18e19 100644 (file)
@@ -554,7 +554,6 @@ Error WasmObjectFile::parseRelocSection(StringRef Name, const uint8_t *Ptr,
     return make_error<GenericBinaryError>("Invalid section code",
                                           object_error::parse_failed);
   uint32_t RelocCount = readVaruint32(Ptr);
-  uint32_t LastOffset = 0;
   uint32_t EndOffset = Section->Content.size();
   while (RelocCount--) {
     wasm::WasmRelocation Reloc = {};
@@ -600,10 +599,9 @@ Error WasmObjectFile::parseRelocSection(StringRef Name, const uint8_t *Ptr,
     if (Reloc.Type == wasm::R_WEBASSEMBLY_TABLE_INDEX_I32 ||
         Reloc.Type == wasm::R_WEBASSEMBLY_MEMORY_ADDR_I32)
       Size = 4;
-    if (Reloc.Offset < LastOffset || Reloc.Offset + Size > EndOffset)
+    if (Reloc.Offset + Size > EndOffset)
       return make_error<GenericBinaryError>("Bad relocation offset",
                                             object_error::parse_failed);
-    LastOffset = Reloc.Offset;
 
     Section->Relocations.push_back(Reloc);
   }