ldelf: scripts/gen_ldelf_hex.py: allow multiple RW load segments

Allow multiple read/write load segments as long as they are contiguous.
This is to support Clang > 8.0.0 which generates this:

 Program Headers:
   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
   LOAD           0x001000 0x00000000 0x00000000 0x0a50c 0x0a50c R E 0x1000
   LOAD           0x00c000 0x0000b000 0x0000b000 0x0006c 0x0006c RW  0x1000
   LOAD           0x00c06c 0x0000b06c 0x0000b06c 0x0006c 0x0007c RW  0x1000
   DYNAMIC        0x00c000 0x0000b000 0x0000b000 0x00060 0x00060 RW  0x4
   GNU_RELRO      0x00c000 0x0000b000 0x0000b000 0x0006c 0x01000 R   0x1
   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0
   EXIDX          0x00b134 0x0000a134 0x0000a134 0x00258 0x00258 R   0x4

  Section to Segment mapping:
   Segment Sections...
    00     .text .rodata .ARM.exidx .gnu.hash .ARM.extab .dynsym .dynstr .hash .rel.dyn
    01     .dynamic .got
    02     .data .bss
    03     .dynamic
    04     .dynamic .got .bss
    05
    06     .ARM.exidx

Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
diff --git a/scripts/gen_ldelf_hex.py b/scripts/gen_ldelf_hex.py
index c3969e3..2a8c22a 100755
--- a/scripts/gen_ldelf_hex.py
+++ b/scripts/gen_ldelf_hex.py
@@ -26,6 +26,8 @@
 
 def emit_load_segments(elffile, outf):
     load_size = 0
+    data_size = 0
+    next_rwseg_va = 0
     n = 0
     for segment in elffile.iter_segments():
         if segment['p_type'] == 'PT_LOAD':
@@ -34,14 +36,17 @@
                     print('Expected first load segment to be read/execute')
                     sys.exit(1)
                 code_size = segment['p_filesz']
-            if n == 1:
+            else:
                 if segment['p_flags'] != (P_FLAGS.PF_R | P_FLAGS.PF_W):
-                    print('Expected second load segment to be read/write')
+                    print('Expected load segment to be read/write')
                     sys.exit(1)
-                data_size = segment['p_filesz']
-            if n > 1:
-                print('Only expected two load segments')
-                sys.exit(1)
+                if next_rwseg_va and segment['p_vaddr'] != next_rwseg_va:
+                    print('Expected contiguous read/write segments')
+                    print(segment['p_vaddr'])
+                    print(next_rwseg_va)
+                    sys.exit(1)
+                data_size += segment['p_filesz']
+                next_rwseg_va = segment['p_vaddr'] + segment['p_filesz']
             load_size += segment['p_filesz']
             n = n + 1