bin2c: Honor symbol alignment
This commit is contained in:
parent
dd60128ba0
commit
5128ff67b2
|
@ -295,7 +295,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "decomp-toolkit"
|
name = "decomp-toolkit"
|
||||||
version = "0.6.2"
|
version = "0.6.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"ar",
|
"ar",
|
||||||
|
|
|
@ -3,7 +3,7 @@ name = "decomp-toolkit"
|
||||||
description = "Yet another GameCube/Wii decompilation toolkit."
|
description = "Yet another GameCube/Wii decompilation toolkit."
|
||||||
authors = ["Luke Street <luke@street.dev>"]
|
authors = ["Luke Street <luke@street.dev>"]
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
version = "0.6.2"
|
version = "0.6.3"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
publish = false
|
publish = false
|
||||||
repository = "https://github.com/encounter/decomp-toolkit"
|
repository = "https://github.com/encounter/decomp-toolkit"
|
||||||
|
|
|
@ -1,8 +1,22 @@
|
||||||
use crate::obj::{ObjSection, ObjSectionKind, ObjSymbol};
|
use crate::obj::{ObjSection, ObjSectionKind, ObjSymbol};
|
||||||
|
|
||||||
|
const PROLOGUE: &str = r#"
|
||||||
|
#ifndef ATTRIBUTE_ALIGN
|
||||||
|
#if defined(__MWERKS__) || defined(__GNUC__)
|
||||||
|
#define ATTRIBUTE_ALIGN(num) __attribute__((aligned(num)))
|
||||||
|
#elif defined(_MSC_VER) || defined(__INTELLISENSE__)
|
||||||
|
#define ATTRIBUTE_ALIGN(num)
|
||||||
|
#else
|
||||||
|
#error unknown compiler
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
"#;
|
||||||
|
|
||||||
/// Converts a binary blob into a C array.
|
/// Converts a binary blob into a C array.
|
||||||
pub fn bin2c(symbol: &ObjSymbol, section: &ObjSection, data: &[u8]) -> String {
|
pub fn bin2c(symbol: &ObjSymbol, section: &ObjSection, data: &[u8]) -> String {
|
||||||
let mut output = String::new();
|
let mut output = String::new();
|
||||||
|
output.push_str(PROLOGUE);
|
||||||
output.push_str(&format!(
|
output.push_str(&format!(
|
||||||
"// {} (size: {:#X}, address: {:#X}, section: {})\n",
|
"// {} (size: {:#X}, address: {:#X}, section: {})\n",
|
||||||
symbol.name, symbol.size, symbol.address, section.name
|
symbol.name, symbol.size, symbol.address, section.name
|
||||||
|
@ -15,7 +29,7 @@ pub fn bin2c(symbol: &ObjSymbol, section: &ObjSection, data: &[u8]) -> String {
|
||||||
}
|
}
|
||||||
output.push_str("unsigned char ");
|
output.push_str("unsigned char ");
|
||||||
output.push_str(symbol.demangled_name.as_deref().unwrap_or(symbol.name.as_str()));
|
output.push_str(symbol.demangled_name.as_deref().unwrap_or(symbol.name.as_str()));
|
||||||
output.push_str("[] = {");
|
output.push_str(&format!("[] ATTRIBUTE_ALIGN({}) = {{", symbol.align.unwrap_or(4)));
|
||||||
for (i, byte) in data.iter().enumerate() {
|
for (i, byte) in data.iter().enumerate() {
|
||||||
if i % 16 == 0 {
|
if i % 16 == 0 {
|
||||||
output.push_str("\n ");
|
output.push_str("\n ");
|
||||||
|
|
Loading…
Reference in New Issue