MC/DC - "Modified Condition/Decision Coverage" - is defined in terms of source code level constructs such as conditions and decisions. These don't directly exist in the object code as it only contains branch statements. Object level code coverage can thus only tell you which branches were or were not covered.
In order to infer MC/DC coverage from branch coverage you would need a way of mapping branch statements back to conditions/decisions in the source code. This might be possible in some circumstances, but is not possible in the general case using off the shelf compilers, which try to remove branch statements where possible as they are bad for performance (branch misprediction can cause an entire pipeline to be invalidated).
For example, consider the following source code, which returns the value of bit n
in the input value:
int check_bit_is_set(int value, int n) { if (value & (0x1 << n)) return 1; else return 0; }
It contains a decision which means MC/DC is required (even though there is only one condition). Using the GCC compiler for Arm at optimization level 1, this compiles down to a series of instructions with no branches:
check_bit_is_set(int, int): asrs r0, r0, r1 and r0, r0, #1 bx lr
It is thus impossible to infer MC/DC coverage of the source code from branch coverage in this case.