[lld] [lld] Align EC code region boundaries. (PR #69100)

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 18 10:58:47 PDT 2023


================
@@ -1421,8 +1421,19 @@ void Writer::assignAddresses() {
     // If /FUNCTIONPADMIN is used, functions are padded in order to create a
     // hotpatchable image.
     uint32_t padding = sec->isCodeSection() ? config->functionPadMin : 0;
+    MachineTypes prevECMachine = IMAGE_FILE_MACHINE_UNKNOWN;
 
     for (Chunk *c : sec->chunks) {
+      if (isArm64EC(ctx.config.machine) && sec->isCodeSection()) {
+        MachineTypes machine = c->getMachine();
+        if (machine != IMAGE_FILE_MACHINE_UNKNOWN) {
+          // We need additional alignment when crossing EC range baudaries.
+          if (prevECMachine != IMAGE_FILE_MACHINE_UNKNOWN &&
+              machine != prevECMachine)
+            virtualSize = alignTo(virtualSize, 4096);
+          prevECMachine = machine;
+        }
----------------
compnerd wrote:

I think that an early continue might simplify this:

```suggestion
         if (prevECMachine == machine || machine == IMAGE_FILE_MACHINE_UNKNOWN)
           continue;
         // We need additional alignment when crossing EC range boundaries.
         virtualSize = alignTo(virtualSize, 4096);
         prevECMachine = machine;
```

https://github.com/llvm/llvm-project/pull/69100


More information about the llvm-commits mailing list