3a) create an empty library libNODELETE.so, set NODELETE flag (linked with "-z nodelete")
3b) create an empty library libA.so, linked to libNODELETE.so, set DT_RUNPATH to '$ORIGIN'
the test shows exactly the same behaviour (relocation of libNODELETE while loading libMAIN.so, SIGSEGV in elf_machine_rela).
The answer is: yes!
If you modify step 3) to
3a) create an empty library libNODELETE.so, set NODELETE flag (linked with "-z nodelete")
3b) create an empty library libA.so, linked to libNODELETE.so, set DT_RUNPATH to '$ORIGIN'
the test shows exactly the same behaviour (relocation of libNODELETE while loading libMAIN.so, SIGSEGV in elf_machine_rela).