[OnePlus 6T  ROMs, Kernels, Recoveries, & Other Dev] Nsane457:
I don't have as much experience as others with the ELF format or Android hacking but I think the ELF file (if it's even fair to call it a "file") is larger than 4488 bytes. Using dumpelf (from pax-utils) on the extracted elf file, I get:

#include <elf.h>

/*
* ELF dump of './abl_a.elf'
* 4488 (0x1188) bytes
*/

Elf32_Dyn dumpedelf_dyn_0[];
struct {
Elf32_Ehdr ehdr;
Elf32_Phdr phdrs[3];
Elf32_Shdr shdrs[0];
Elf32_Dyn *dyns;
} dumpedelf_0 = {

.ehdr = {
.e_ident = { /* (EI_NIDENT bytes) */
/* [0] EI_MAG: */ 0x7F,'E','L','F',
/* [4] EI_CLASS: */ 1 , /* (ELFCLASS32) */
/* [5] EI_DATA: */ 1 , /* (ELFDATA2LSB) */
/* [6] EI_VERSION: */ 1 , /* (EV_CURRENT) */
/* [7] EI_OSABI: */ 0 , /* (ELFOSABI_NONE) */
/* [8] EI_ABIVERSION: */ 0 ,
/* [9-15] EI_PAD: */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
},
.e_type = 2 , /* (ET_EXEC) */
.e_machine = 40 , /* (EM_ARM) */
.e_version = 1 , /* (EV_CURRENT) */
.e_entry = 0x9FA00000 , /* (start address at runtime) */
.e_phoff = 52 , /* (bytes into file) */
.e_shoff = 0 , /* (bytes into file) */
.e_flags = 0x0 ,
.e_ehsize = 52 , /* (bytes) */
.e_phentsize = 32 , /* (bytes) */
.e_phnum = 3 , /* (program headers) */
.e_shentsize = 0 , /* (bytes) */
.e_shnum = 0 , /* (section headers) */
.e_shstrndx = 0
},

.phdrs = {
/* Program Header #0 0x34 */
{
.p_type = 0 , /* [PT_NULL] */
.p_offset = 0 , /* (bytes into file) */
.p_vaddr = 0x0 , /* (virtual addr at runtime) */
.p_paddr = 0x0 , /* (physical addr at runtime) */
.p_filesz = 148 , /* (bytes in file) */
.p_memsz = 0 , /* (bytes in mem at runtime) */
.p_flags = 0x7000000 , /* 0x7000000 */
.p_align = 0 , /* (min mem alignment in bytes) */
},
/* Program Header #1 0x54 */
{
.p_type = 0 , /* [PT_NULL] */
.p_offset = 4096 , /* (bytes into file) */
.p_vaddr = 0x9FA30000 , /* (virtual addr at runtime) */
.p_paddr = 0x9FA30000 , /* (physical addr at runtime) */
.p_filesz = 6536 , /* (bytes in file) */
.p_memsz = 8192 , /* (bytes in mem at runtime) */
.p_flags = 0x2200000 , /* 0x2200000 */
.p_align = 4096 , /* (min mem alignment in bytes) */
/* Warning: Program segment is corrupt. */
},
/* Program Header #2 0x74 */
{
.p_type = 1 , /* [PT_LOAD] */
.p_offset = 12288 , /* (bytes into file) */
.p_vaddr = 0x9FA00000 , /* (virtual addr at runtime) */
.p_paddr = 0x9FA00000 , /* (physical addr at runtime) */
.p_filesz = 196608 , /* (bytes in file) */
.p_memsz = 196608 , /* (bytes in mem at runtime) */
.p_flags = 0x7 , /* PF_R | PF_W | PF_X */
.p_align = 4096 , /* (min mem alignment in bytes) */
/* Warning: Program segment is corrupt. */
},
},

.shdrs = {
/* no section headers ! */ },

.dyns = dumpedelf_dyn_0,
};
Elf32_Dyn dumpedelf_dyn_0[] = {
/* no dynamic tags ! */ };

Note the /* Warning: Program segment is corrupt. */ in the 2 last program header sections. That's because their offset into the file and their size (.p_offset and .p_filesz, respectively) are much larger than what could fit in 4488 bytes.

Note, since the ELF header is at the very beginning of the partition you should be able to use readelf on the entire partition file. Using dumpelf on the entire partition file removes the above warning.

Not sure if any of this was helpful.