MCPcopy Create free account
hub / github.com/beefytech/Beef / AddChunk

Method AddChunk

IDEHelper/Linker/BlContext.cpp:30–91  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

28//////////////////////////////////////////////////////////////////////////
29
30BlChunk* BlSegment::AddChunk(void* data, int size, int characteristics, int& offset)
31{
32 if (size == 0)
33 return NULL;
34
35 if ((characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA) != 0)
36 {
37 BF_ASSERT(data == NULL);
38 }
39 else
40 {
41 BF_ASSERT(data != NULL);
42 }
43
44 int align = 1;
45 int chAlign = characteristics & IMAGE_SCN_ALIGN_MASK;
46 if (chAlign == IMAGE_SCN_ALIGN_8192BYTES)
47 align = 8192;
48 else if (chAlign == IMAGE_SCN_ALIGN_4096BYTES)
49 align = 4096;
50 else if (chAlign == IMAGE_SCN_ALIGN_2048BYTES)
51 align = 2048;
52 else if (chAlign == IMAGE_SCN_ALIGN_1024BYTES)
53 align = 1024;
54 else if (chAlign == IMAGE_SCN_ALIGN_512BYTES)
55 align = 512;
56 else if (chAlign == IMAGE_SCN_ALIGN_256BYTES)
57 align = 256;
58 else if (chAlign == IMAGE_SCN_ALIGN_128BYTES)
59 align = 128;
60 else if (chAlign == IMAGE_SCN_ALIGN_64BYTES)
61 align = 64;
62 else if (chAlign == IMAGE_SCN_ALIGN_32BYTES)
63 align = 32;
64 else if (chAlign == IMAGE_SCN_ALIGN_16BYTES)
65 align = 16;
66 else if (chAlign == IMAGE_SCN_ALIGN_8BYTES)
67 align = 8;
68 else if (chAlign == IMAGE_SCN_ALIGN_4BYTES)
69 align = 4;
70 else if (chAlign == IMAGE_SCN_ALIGN_2BYTES)
71 align = 2;
72
73 int prevSize = mCurSize;
74 mCurSize = (mCurSize + (align - 1)) & ~(align - 1);
75 offset = mCurSize;
76 mCurSize += size;
77 mAlign = std::max(mAlign, align);
78 if (data == NULL)
79 return NULL;
80
81 BlChunk blChunk;
82 blChunk.mOffset = offset;
83 blChunk.mAlignPad = offset - prevSize;
84 blChunk.mSize = size;
85 blChunk.mData = data;
86 blChunk.mObjectDataIdx = -1;
87

Callers 1

LoadFilesMethod · 0.80

Calls 2

push_backMethod · 0.45
backMethod · 0.45

Tested by

no test coverage detected